/****   request.js   ****/
// 导入axios
import axios from 'axios'
import { ElMessage } from 'element-plus'
// import { showLoading, hideLoading } from '@/utils/loading'

//1. 创建新的axios实例，
const service = axios.create({
  // 超时时间 单位是ms，这里设置了300s的超时时间
  timeout: 300 * 1000
})

// 2.请求拦截器
service.interceptors.request.use(
  (config) => {
    // showLoading()

    // 添加token到请求头
    // const token = localStorage.getItem('token') || sessionStorage.getItem('token');
    // if (token) {
    //   config.headers['Authorization'] = `Bearer ${token}`;
    //   // 或者根据后端要求使用其他格式，例如:
    //   // config.headers['token'] = token;
    // }

    return config
  },
  (error) => {
    console.log('错误')
    Promise.reject(error)
  }
)

// 3.响应拦截器
service.interceptors.response.use(
  (response) => {
    //接收到响应数据并成功后的一些共有的处理，关闭loading等
    // setTimeout(() => {
    //   hideLoading()
    // }, 200)

    if (response.data && response.data.errorCode == 'fail') {
      ElMessage.error('接口获取数据失败,请重新进入页面!')
      throw new Error('接口获取数据失败:' + response.data.message)
    } else {
      return response.data
    }
  },
  (error) => {
    // setTimeout(() => {
    //   hideLoading()
    // }, 200)
    console.log('error', error)
    /***** 接收到异常响应的处理开始 *****/
    if (error && error.response) {
      // 1.公共错误处理
      // 2.根据响应码具体处理
      switch (error.response.status) {
        case 400:
          error.message = '错误请求'
          break
        case 401:
          error.message = '未授权，请重新登录'
          break
        case 403:
          error.message = '拒绝访问'
          break
        case 404:
          error.message = '请求错误,未找到该资源'
          break
        case 405:
          error.message = '请求方法未允许'
          break
        case 408:
          error.message = '请求超时'
          break
        case 500:
          error.message = '服务器端出错'
          break
        case 501:
          error.message = '网络未实现'
          break
        case 502:
          error.message = '网络错误'
          break
        case 503:
          error.message = '服务不可用'
          break
        case 504:
          error.message = '网络超时'
          break
        case 505:
          error.message = 'http版本不支持该请求'
          break
        default:
          error.message = `连接错误${error.response.status}`
      }
      ElMessage.error(error.message)
    } else {
      // 超时处理
      ElMessage.error('连接服务器失败')
    }

    /***** 处理结束 *****/
    //如果不需要错误处理，以上的处理过程都可省略
    return Promise.resolve(error.response)
  }
)
//4.导入文件
export default service
